各種方法根據用於不同對象可以分為不同名稱的方法,
用於實體的即為實體方法,例如:
class Card
def rent_court(sport)
puts "租#{sport}"
end
def use
puts "使用泳池"
end
end
arance = Card.new
arance.rent_court "羽球場"
arance.use
betty = Card.new
betty.rent_court "壁球場"
betty.use
Card方法用於在arance變數上,
則arance為實體;
相同的Card方法用於在betty變數上,
則betty為實體,即Card為實體方法。
定義self在實體方法上的方法,則成為類別方法。
例如:
class Card
def self.all
puts "運動中心會員"
end
end
Card.all
Card.all就變成類別方法。
之前提過實體變數就是以@符號開頭的變數,
但其實在設定上每次都樣這樣使用其實有點麻煩。
我們會藉由三種方式改善這件事:
getter的概念,例如:
def name
@name
end
我們就會藉由attr_reader : name來作替代,
所以我們可以藉由這樣來替代以上寫法。
setter的概念,例如:
def name=(new_name)
@name = new_name
end
我們就會藉由attr_writer : name來作替代,
所以我們可以藉由這樣來替代以上寫法。
當如果我們使用attr_reader : name和attr_writer : name,
例如:
attr_reader : name
attr_writer : name
我們可以藉由attr_accessor : name來做代替,
代替以上這兩行的寫法。
繼承的概念就像大家都共同擁有的概念,
例如之前敘述國民運動中心的會員,
像每一個區域都有國民運動中心,像新莊、三重、板橋…地區都有。
class Card
def rent_court(sport)
puts "租#{sport}"
end
def use
puts "使用泳池"
end
end
class Xinzhuang
def rent_court(sport)
puts "租#{sport}"
end
def use
puts "使用泳池"
end
end
class Sanchong
def rent_court(sport)
puts "租#{sport}"
end
def use
puts "使用泳池"
end
end
class Banqiao
def rent_court(sport)
puts "租#{sport}"
end
def use
puts "使用泳池"
end
end
但對我們而言,程式碼可能要重複的寫三次,
但不過我們可以藉由繼承的概念,將程式碼簡化:
class Card
def rent_court(sport)
puts "租#{sport}"
end
def use
puts "使用泳池"
end
end
class Xinzhuang < Card
end
class Sanchong < Card
end
class Banqiao < Card
end
因為每個運動中心都有租借場地以及游泳的服務項目,
這樣我們藉由寫好一個,就可以通用在各個國民運動中心。